// /**
//  * @param {string} s
//  * @return {number[]}
//  */
//  var diStringMatch = function(s) {
//   let start = 0;
//   const ret = new Array(s.length + 1).fill(0).map(_ => start++);
//   let flag = true;
//   const swap = (i) => {
//       const temp = ret[i + 1];
//       ret[i + 1] = ret[i];
//       ret[i] = temp;
//   }
//   while(flag) {
//       flag = false;
//       for(let i = 0; i < s.length; i++) {
//           if((ret[i] < ret[i+1]) ^ (s[i] === 'I')) {
//               swap(i);
//               flag = true;
//           }
//       }
//   }
//   return ret;
// };

/**
 * @param {string} s
 * @return {number[]}
 */
 var diStringMatch = function(s) {
  let min = 0, max = s.length;
  return [...new Array(s.length).fill(0).map((_, i) => s[i] === 'I' ? min++ : max--), min];
};